home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / c / amivogl-mdev / src / vogl.h < prev    next >
C/C++ Source or Header  |  1998-01-12  |  31KB  |  905 lines

  1. /* vogl.h: */
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <stdlib.h>
  5.  
  6. #ifdef AZTEC_C
  7. # ifndef AMIGA
  8. #  define AMIGA
  9. # endif
  10. #else
  11. # ifdef AMIGA
  12. #  ifndef AZTEC_C
  13. #   define AZTEC_C
  14. #  endif
  15. # endif
  16. #endif
  17.  
  18. #if defined(PC) || defined(AMIGA) || defined(AZTEC_C)
  19. #include <string.h>
  20. #else
  21. #include <strings.h>
  22. #endif
  23.  
  24. #ifdef PC    /* Stupid pox head crap */
  25. char    *vallocate();
  26. char    *malloc();
  27. #endif
  28.  
  29. #if defined(AMIGA) || defined(sgi)
  30. # ifndef __PROTOTYPE__
  31. #  define __PROTOTYPE__
  32. # endif
  33. #include "hershey.h"
  34. #endif
  35.  
  36. /*
  37.  * VOGL is always defined if a header file is from the 
  38.  * VOGL library. In cases where you do use some VOGL
  39.  * initialisation routines like vinit, just put #ifdef VOGL...
  40.  * around.
  41.  */
  42. #ifndef VOGL
  43. #define    VOGL
  44. #endif
  45.  
  46. #ifndef TRUE
  47. #define    TRUE    1
  48. #endif
  49.  
  50. #ifndef FALSE
  51. #define    FALSE    0
  52. #endif
  53.  
  54. /*
  55.  * Misc defines...
  56.  */
  57. #define    FLAT    0
  58. #define SMOOTH    1
  59. #define GD_XPMAX 1
  60. #define GD_YPMAX 2
  61.  
  62. /*
  63.  * standard colour indices
  64.  */
  65. #define    BLACK        0
  66. #define    RED        1
  67. #define    GREEN        2
  68. #define    YELLOW        3
  69. #define    BLUE        4
  70. #define    MAGENTA        5
  71. #define    CYAN        6
  72. #define    WHITE        7
  73.  
  74. /*
  75.  * when (if ever) we need the precision
  76.  */
  77. #ifdef DOUBLE
  78. #define    float    double
  79. #endif
  80.  
  81. /*
  82.  * How to convert degrees to radians
  83.  */
  84. #define    PI    3.14159265358979
  85. #define D2R    (PI / 180.0)
  86.  
  87. /*
  88.  * miscellaneous typedefs and type defines
  89.  */
  90. typedef float    Vector[4];
  91. typedef float    Matrix[4][4];
  92. typedef float    Tensor[4][4][4];
  93. typedef short    Angle;
  94. typedef float    Coord;
  95. typedef long    Icoord;
  96. typedef short    Scoord;
  97. // typedef long    Object;
  98. typedef short    Screencoord;
  99. typedef long    Boolean;
  100.  
  101. typedef unsigned short    Device;
  102.  
  103. typedef unsigned short    Colorindex;
  104.  
  105.  
  106. /*
  107.  * when register variables get us into trouble
  108.  */
  109. #ifdef NOREGISTER
  110. #define    register
  111. #endif
  112.  
  113. /*
  114.  * max number of vertices in a ploygon
  115.  */
  116. #define    MAXVERTS    128
  117.  
  118. /*
  119.  * object definitions
  120.  */
  121. #define MAXENTS        101        /* size of object table */
  122. #define    MAXTOKS        100        /* num. of tokens alloced at once in
  123.                        an object  */
  124.  
  125. /*
  126.  * Polygon fill modes for "polymode"
  127.  */
  128. #define PYM_POINT    0
  129. #define PYM_LINE    0
  130. #define PYM_FILL    1
  131. #define PYM_HOLLOW    1
  132.  
  133. /*
  134.  * functions which can appear in objects
  135.  */
  136. #define    ARC        1
  137. #define    CALLOBJ        3
  138. #define    CIRCLE        5
  139. #define    CLEAR        6
  140. #define    COLOR        7
  141. #define    DRAW        8
  142. #define    DRAWSTR        10
  143. #define    FONT        12
  144. #define    LOADMATRIX    15
  145. #define    MAPCOLOR    16
  146. #define    MOVE        17
  147. #define    MULTMATRIX    18
  148. #define    POLY        19
  149. #define    POPATTRIBUTES    22
  150. #define    POPMATRIX    23
  151. #define    POPVIEWPORT    24
  152. #define    PUSHATTRIBUTES    25
  153. #define    PUSHMATRIX    26
  154. #define    PUSHVIEWPORT    27
  155. #define    RCURVE        28
  156. #define    RPATCH        29
  157. #define    SECTOR        30
  158. #define    VIEWPORT    33
  159. #define    BACKBUFFER    34
  160. #define    FRONTBUFFER    35
  161. #define    SWAPBUFFERS    36
  162. #define    BACKFACING    37
  163. #define    TRANSLATE    38
  164. #define    ROTATE        39
  165. #define    SCALE        40
  166.  
  167. #define    ARCF        41
  168. #define    CIRCF        42
  169. #define    POLYF        43
  170. #define    RECTF        44
  171.  
  172. #define    CMOV        45
  173.  
  174. /*
  175.  * States for bgn* and end* calls
  176.  */
  177. #define    NONE        0    /* Just set current spot */
  178. #define    VPNT        1    /* Draw dots         */
  179. #define    VLINE        2    /* Draw lines         */
  180. #define    VCLINE        3    /* Draw closed lines     */
  181. #define    VPOLY        4    /* Draw a polygon      */
  182.  
  183. /*
  184.  * data types for object tokens
  185.  */
  186. typedef union tk {
  187.     char    *s;
  188.     int      i;
  189.     float    f;
  190.     } Token;
  191.  
  192. typedef struct tls {
  193.     int         count;
  194.     Token      *toks;
  195.     struct tls *next;
  196.     } TokList;
  197.  
  198. /*
  199.  * double buffering modes.
  200.  */
  201. #define    SINGLEBUF        1
  202.  
  203. /*
  204.  * attributes
  205.  */
  206. typedef struct {
  207.     char    backface,
  208.         mode;            /* Which mode are we in */
  209.     int     color;
  210.     float   fontheight;
  211.     float   fontwidth;
  212.     int    fontnum;
  213.     } Attribute;
  214.  
  215. /*
  216.  * viewport
  217.  */
  218. typedef struct vp {
  219.     float    left;
  220.     float    right;
  221.     float    bottom;
  222.     float    top;
  223.     } Viewport; 
  224.  
  225. /*
  226.  * stacks
  227.  */
  228. typedef    struct    ms {    /* Matrix stack entries    */
  229.     Matrix        m;
  230.     struct    ms    *back;
  231.     } Mstack;
  232.  
  233. typedef    struct    as {    /* Attribute stack entries */
  234.     Attribute    a;
  235.     struct    as    *back;
  236.     } Astack;
  237.  
  238. typedef    struct    vs {    /* Viewport stack entries */
  239.     Viewport    v;
  240.     struct    vs    *back;
  241.     } Vstack;
  242.  
  243. /*
  244.  * vogle device structures
  245.  */
  246. #ifdef AMIGA
  247. typedef struct dev {
  248.     char    *devname;                /* name of device                        */
  249.     char    *large,                    /* name of large font                    */
  250.         *small;                        /* name of small font                    */
  251.     int    (*Vbackb)(void),            /* Set drawing in back buffer            */
  252.         (*Vchar)(char),                /* Draw a hardware character            */
  253.         (*Vcheckkey)(void),            /* Ckeck if a key was hit                */
  254.         (*Vclear)(void),            /* Clear the screen to current color    */
  255.         (*Vcolor)(int),                /* Set current color                    */
  256.         (*Vdraw)(int,int),            /* Draw a line                            */
  257.         (*Vexit)(void),                /* Exit graphics                        */
  258.         (*Vfill)(int,int[],int[]),    /* Fill a polygon                        */
  259.         (*Vfont)(char *),            /* Set hardware font                    */
  260.         (*Vfrontb)(void),            /* Set drawing in front buffer            */
  261.         (*Vgetkey)(void),            /* Wait for and get the next key hit    */
  262.         (*Vinit)(void),                /* Initialise the device                */
  263.         (*Vlocator)(int *,int*),    /* Get mouse/cross hair position        */
  264.         (*Vmapcolor)(int,int,int,int),/* Set color indicies                    */
  265.         (*Vstring)(char *),            /* Draw a hardware string                */
  266.         (*Vswapb)(void);            /* Swap front and back buffers            */
  267.     } DevEntry;
  268. #else
  269. typedef struct dev {
  270.     char    *devname;        /* name of device                        */
  271.     char    *large,            /* name of large font                    */
  272.         *small;                /* name of small font                    */
  273.     int    (*Vbackb)(),        /* Set drawing in back buffer            */
  274.         (*Vchar)(),            /* Draw a hardware character            */
  275.         (*Vcheckkey)(),        /* Ckeck if a key was hit                */
  276.         (*Vclear)(),        /* Clear the screen to current color    */
  277.         (*Vcolor)(),        /* Set current color                    */
  278.         (*Vdraw)(),            /* Draw a line                            */
  279.         (*Vexit)(),            /* Exit graphics                        */
  280.         (*Vfill)(),            /* Fill a polygon                        */
  281.         (*Vfont)(),            /* Set hardware font                    */
  282.         (*Vfrontb)(),        /* Set drawing in front buffer            */
  283.         (*Vgetkey)(),        /* Wait for and get the next key hit    */
  284.         (*Vinit)(),            /* Initialise the device                */
  285.         (*Vlocator)(),        /* Get mouse/cross hair position        */
  286.         (*Vmapcolor)(),        /* Set color indicies                    */
  287.         (*Vstring)(),        /* Draw a hardware string                */
  288.         (*Vswapb)();        /* Swap front and back buffers            */
  289.     } DevEntry;
  290. #endif
  291.  
  292. typedef struct vdev {
  293.     char        initialised,
  294.                 clipoff,
  295.                 inobject,
  296.                 inpolygon,
  297.                 fill,            /* polygon filling                        */
  298.                 cpVvalid,        /* is the current device position valid */
  299.                 inbackbuffer,    /* are we in the backbuffer                */
  300.                 clipplanes;        /* active clipping planes                */
  301.     void        (*pmove)(),        /* Polygon moves                        */
  302.                 (*pdraw)();        /* Polygon draws                        */
  303.     TokList        *tokens;        /* ptr 2 list of tokens for current object */
  304.     Mstack        *transmat;        /* top of transformation stack            */
  305.     Astack        *attr;            /* top of attribute stack                */
  306.     Vstack        *viewport;        /* top of viewport stack                */
  307.     float        hheight, hwidth;/* hardware character height, width        */
  308.     Vector        cpW,            /* current postion in world coords        */
  309.                 cpWtrans,        /* current world coords transformed        */
  310.                 upvector;        /* world up                                */
  311.     int            depth,            /* # bit planes on screen                */
  312.                 maxVx, minVx,
  313.                 maxVy, minVy,
  314.                 sizeX, sizeY,     /* size of square on screen                */
  315.                 sizeSx, sizeSy,    /* side in x, side in y (# pixels)        */
  316.                 cpVx, cpVy;
  317.     DevEntry    dev;
  318.     float        savex,            /* Where we started for v*()            */
  319.                 savey,
  320.                 savez;
  321.     char        bgnmode;        /* What to do with v*() calls            */
  322.     char        save;            /* Do we save 1st v*() point            */
  323.  
  324.     char        *wintitle;        /* window title                            */
  325.  
  326.     char        *devname;        /* pointer to device name                */
  327.  
  328.     Matrix        tbasis, ubasis, *bases; /* Patch stuff                    */
  329.     
  330.     char        *enabled;        /* pointer to enabled devices mask        */
  331.     int            maxfontnum;
  332.  
  333.     char        alreadyread;    /* queue device stuff                    */
  334.     char        kbdmode;        /* are we in keyboard mode                */
  335.     char        mouseevents;    /* are mouse events enabled                */
  336.     char        kbdevents;        /* are kbd events enabled                */
  337.     int            devno, data;
  338.  
  339.     int            concave;        /* concave polygons?                    */
  340.  
  341.     } VDevice;
  342.  
  343. extern VDevice    vdevice;        /* device structure                        */
  344.  
  345. #define    V_X    0            /* x axis in cpW */
  346. #define    V_Y    1            /* y axis in cpW */
  347. #define    V_Z    2            /* z axis in cpW */
  348. #define    V_W    3            /* w axis in cpW */
  349.  
  350. #ifdef __PROTOTYPE__
  351.  
  352. void arcprecision(int);                                /* arcs.c          */
  353. void circleprecision(int);                             /* arcs.c          */
  354. void arc( Coord, Coord, Coord, Angle, Angle);          /* arcs.c          */
  355. void arcs( Scoord, Scoord, Scoord, Angle, Angle);      /* arcs.c          */
  356. void arci( Icoord, Icoord, Icoord, Angle, Angle);      /* arcs.c          */
  357. void arcf( Coord, Coord, Coord, Angle, Angle);         /* arcs.c          */
  358. void arcfs( Scoord, Scoord, Scoord, Angle, Angle);     /* arcs.c          */
  359. void arcfi( Icoord, Icoord, Icoord, Angle, Angle);     /* arcs.c          */
  360. void circ( Coord, Coord, Coord);                       /* arcs.c          */
  361. void circs( Scoord, Scoord, Scoord);                   /* arcs.c          */
  362. void circi( Icoord, Icoord, Icoord);                   /* arcs.c          */
  363. void circf( Coord, Coord, Coord);                      /* arcs.c          */
  364. void circfs( Scoord, Scoord, Scoord);                  /* arcs.c          */
  365. void circfi( Icoord, Icoord, Icoord);                  /* arcs.c          */
  366. void pushattributes(void);                             /* attr.c          */
  367. void popattributes(void);                              /* attr.c          */
  368. int printattribs(char *);                              /* attr.c          */
  369. void backbuffer(int);                                  /* buffer.c        */
  370. void frontbuffer(int);                                 /* buffer.c        */
  371. void swapbuffers(void);                                /* buffer.c        */
  372. void doublebuffer(void);                               /* buffer.c        */
  373. void singlebuffer(void);                               /* buffer.c        */
  374. void clip( register Vector, register Vector);          /* clip.c          */
  375. int MakeEdgeCoords( int, Vector);                      /* clip.c          */
  376. void quickclip( register Vector, register Vector);     /* clip.c          */
  377. void curvebasis(short);                                /* curves.c        */
  378. void curveprecision(short);                            /* curves.c        */
  379. void rcrv(Coord[4][4]);                                /* curves.c        */
  380. void crv(Coord[4][3]);                                 /* curves.c        */
  381. void drcurve( int, Matrix);                            /* curves.c        */
  382. void crvn( long, Coord[][3]);                          /* curves.c        */
  383. void rcrvn( long, Coord[][4]);                         /* curves.c        */
  384. void curveit(short);                                   /* curves.c        */
  385. void draw( float, float, float);                       /* draw.c          */
  386. void draws( Scoord, Scoord, Scoord);                   /* draw.c          */
  387. void drawi( Icoord, Icoord, Icoord);                   /* draw.c          */
  388. void draw2( float, float);                             /* draw.c          */
  389. void draw2s( Scoord, Scoord);                          /* draw.c          */
  390. void draw2i( Icoord, Icoord);                          /* draw.c          */
  391. void rdr( float, float, float);                        /* draw.c          */
  392. void rdrs( Scoord, Scoord, Scoord);                    /* draw.c          */
  393. void rdri( Icoord, Icoord, Icoord);                    /* draw.c          */
  394. void rdr2( float, float);                              /* draw.c          */
  395. void rdr2s( Scoord, Scoord);                           /* draw.c          */
  396. void rdr2i( Icoord, Icoord);                           /* draw.c          */
  397. void bgnline(void);                                    /* draw.c          */
  398. void endline(void);                                    /* draw.c          */
  399. void bgnclosedline(void);                              /* draw.c          */
  400. void endclosedline(void);                              /* draw.c          */
  401. void voutput(char *);                                  /* drivers.c       */
  402. FILE * _voutfile(void);                                /* drivers.c       */
  403. void verror(char *);                                   /* drivers.c       */
  404. void gexit(void);                                      /* drivers.c       */
  405. void vinit(char *);                                    /* drivers.c       */
  406. long winopen(char *);                                  /* drivers.c       */
  407. void ginit(void);                                      /* drivers.c       */
  408. void gconfig(void);                                    /* drivers.c       */
  409. void vnewdev(char *);                                  /* drivers.c       */
  410. char * vgetdev(char *);                                /* drivers.c       */
  411. long getvaluator(Device);                              /* drivers.c       */
  412. Boolean getbutton(Device);                             /* drivers.c       */
  413. void clear(void);                                      /* drivers.c       */
  414. void colorf(float);                                    /* drivers.c       */
  415. void color(int);                                       /* drivers.c       */
  416. void mapcolor( Colorindex, short, short, short);       /* drivers.c       */
  417. long getplanes(void);                                  /* drivers.c       */
  418. void reshapeviewport(void);                            /* drivers.c       */
  419. void winconstraints(void);                             /* drivers.c       */
  420. void keepaspect(void);                                 /* drivers.c       */
  421. void shademodel(long);                                 /* drivers.c       */
  422. long getgdesc(long);                                   /* drivers.c       */
  423. void getgp( Coord *, Coord *, Coord *);                /* getgp.c         */
  424. void getgpos( Coord *, Coord *, Coord *, Coord *);     /* getgp.c         */
  425. void VtoWxy( float, float, float *, float *);          /* mapping.c       */
  426. void _mapmsave(Matrix);                                /* mapping.c       */
  427. void CalcW2Vcoeffs(void);                              /* mapping.c       */
  428. int WtoVx(float[]);                                    /* mapping.c       */
  429. int WtoVy(float[]);                                    /* mapping.c       */
  430. void copyvector( register Vector, register Vector);    /* matrix.c        */
  431. void copymatrix( register Matrix, register Matrix);    /* matrix.c        */
  432. void copytranspose( register Matrix,                   /* matrix.c        */
  433.    register Matrix);
  434. void getmatrix(Matrix);                                /* matrix.c        */
  435. void pushmatrix(void);                                 /* matrix.c        */
  436. void popmatrix(void);                                  /* matrix.c        */
  437. void loadmatrix(Matrix);                               /* matrix.c        */
  438. void mult4x4( register Matrix, register Matrix,        /* matrix.c        */
  439.    register Matrix);
  440. void multmatrix(Matrix);                               /* matrix.c        */
  441. void identmatrix(Matrix);                              /* matrix.c        */
  442. void multvector( register Vector, register Vector,     /* matrix.c        */
  443.    register Matrix);
  444. void premultvector( Vector, Vector, Matrix);           /* matrix.c        */
  445. int printmat( char *, Matrix);                         /* matrix.c        */
  446. int printvect( char *, Vector);                        /* matrix.c        */
  447. void move( Coord, Coord, Coord);                       /* move.c          */
  448. void moves( Scoord, Scoord, Scoord);                   /* move.c          */
  449. void movei( Icoord, Icoord, Icoord);                   /* move.c          */
  450. void move2( Coord, Coord);                             /* move.c          */
  451. void move2s( Scoord, Scoord);                          /* move.c          */
  452. void move2i( Icoord, Icoord);                          /* move.c          */
  453. void rmv( Coord, Coord, Coord);                        /* move.c          */
  454. void rmvs( Scoord, Scoord, Scoord);                    /* move.c          */
  455. void rmvi( Icoord, Icoord, Icoord);                    /* move.c          */
  456. void rmv2( float, float);                              /* move.c          */
  457. void rmv2s( Scoord, Scoord);                           /* move.c          */
  458. void rmv2i( Icoord, Icoord);                           /* move.c          */
  459. Token * newtokens(int);                                /* newtoken.c      */
  460. Token * newtokens(int);                                /* newtokens.c     */
  461. void makeobj(long);                                    /* objects.c       */
  462. void closeobj(void);                                   /* objects.c       */
  463. void delobj(long);                                     /* objects.c       */
  464. long genobj(void);                                     /* objects.c       */
  465. long getopenobj(void);                                 /* objects.c       */
  466. void callobj(long);                                    /* objects.c       */
  467. Boolean isobj(long);                                   /* objects.c       */
  468. void defbasis( short, Matrix);                         /* patches.c       */
  469. void patchbasis( long, long);                          /* patches.c       */
  470. void patchcurves( long, long);                         /* patches.c       */
  471. void patchprecision( long, long);                      /* patches.c       */
  472. void patch( Matrix, Matrix, Matrix);                   /* patches.c       */
  473. void rpatch( Matrix, Matrix, Matrix, Matrix);          /* patches.c       */
  474. void transformtensor( Tensor, Matrix);                 /* patches.c       */
  475. void drpatch( Tensor, int, int, int, int, int, int);   /* patches.c       */
  476. void pnt( float, float, float);                        /* points.c        */
  477. void pnts( Scoord, Scoord, int);                       /* points.c        */
  478. void pnti( Icoord, Icoord, Icoord);                    /* points.c        */
  479. void pnt2( Coord, Coord);                              /* points.c        */
  480. void pnt2s( Scoord, Scoord);                           /* points.c        */
  481. void pnt2i( Icoord, Icoord);                           /* points.c        */
  482. void bgnpoint(void);                                   /* points.c        */
  483. void endpoint(void);                                   /* points.c        */
  484. void concave(Boolean);                                 /* polygons.c      */
  485. void backface(int);                                    /* polygons.c      */
  486. void frontface(int);                                   /* polygons.c      */
  487. void polymode(long);                                   /* polygons.c      */
  488. void polyobj( int, Token[], int);                      /* polygons.c      */
  489. void poly2( long, float[][2]);                         /* polygons.c      */
  490. void poly2i( long, Icoord[][2]);                       /* polygons.c      */
  491. void poly2s( long, Scoord[][2]);                       /* polygons.c      */
  492. void polyi( long, Icoord[][3]);                        /* polygons.c      */
  493. void polys( long, Scoord[][3]);                        /* polygons.c      */
  494. void polf2( long, float[][2]);                         /* polygons.c      */
  495. void polf2i( long, Icoord[][2]);                       /* polygons.c      */
  496. void polf2s( long, Scoord[][2]);                       /* polygons.c      */
  497. void polfi( long, Icoord[][3]);                        /* polygons.c      */
  498. void polfs( long, Scoord[][3]);                        /* polygons.c      */
  499. void poly( long, float[][3]);                          /* polygons.c      */
  500. void polf( long, float[][3]);                          /* polygons.c      */
  501. void pmv( float, float, float);                        /* polygons.c      */
  502. void pmvi( Icoord, Icoord, Icoord);                    /* polygons.c      */
  503. void pmv2i( Icoord, Icoord);                           /* polygons.c      */
  504. void pmvs( Scoord, Scoord, Scoord);                    /* polygons.c      */
  505. void pmv2s( Scoord, Scoord);                           /* polygons.c      */
  506. void pmv2( float, float);                              /* polygons.c      */
  507. void pdr( Coord, Coord, Coord);                        /* polygons.c      */
  508. void rpdr( Coord, Coord, Coord);                       /* polygons.c      */
  509. void rpdr2( Coord, Coord);                             /* polygons.c      */
  510. void rpdri( Icoord, Icoord, Icoord);                   /* polygons.c      */
  511. void rpdr2i( Icoord, Icoord);                          /* polygons.c      */
  512. void rpdrs( Scoord, Scoord, Scoord);                   /* polygons.c      */
  513. void rpdr2s( Scoord, Scoord);                          /* polygons.c      */
  514. void rpmv( Coord, Coord, Coord);                       /* polygons.c      */
  515. void rpmv2( Coord, Coord);                             /* polygons.c      */
  516. void rpmvi( Icoord, Icoord, Icoord);                   /* polygons.c      */
  517. void rpmv2i( Icoord, Icoord);                          /* polygons.c      */
  518. void rpmvs( Scoord, Scoord, Scoord);                   /* polygons.c      */
  519. void rpmv2s( Scoord, Scoord);                          /* polygons.c      */
  520. void pdri( Icoord, Icoord, Icoord);                    /* polygons.c      */
  521. void pdr2i( Icoord, Icoord);                           /* polygons.c      */
  522. void pdrs( Scoord, Scoord);                            /* polygons.c      */
  523. void pdr2s( Scoord, Scoord);                           /* polygons.c      */
  524. void pdr2( float, float);                              /* polygons.c      */
  525. void pclos(void);                                      /* polygons.c      */
  526. void bgnpolygon(void);                                 /* polygons.c      */
  527. void endpolygon(void);                                 /* polygons.c      */
  528. void prefposition( long, long, long, long);            /* pref.c          */
  529. void prefsize( long, long);                            /* pref.c          */
  530. void getprefposandsize( int *, int *, int *, int *);   /* pref.c          */
  531. void qdevice(Device);                                  /* queue.c         */
  532. void unqdevice(Device);                                /* queue.c         */
  533. long qread(short *);                                   /* queue.c         */
  534. void qreset(void);                                     /* queue.c         */
  535. long qtest(void);                                      /* queue.c         */
  536. Boolean isqueued(Device);                              /* queue.c         */
  537. void qenter( Device, short);                           /* queue.c         */
  538. void rect( Coord, Coord, Coord, Coord);                /* rect.c          */
  539. void recti( Icoord, Icoord, Icoord, Icoord);           /* rect.c          */
  540. void rects( Scoord, Scoord, Scoord, Scoord);           /* rect.c          */
  541. void rectf( Coord, Coord, Coord, Coord);               /* rect.c          */
  542. void rectfi( Icoord, Icoord, Icoord, Icoord);          /* rect.c          */
  543. void rectfs( Scoord, Scoord, Scoord, Scoord);          /* rect.c          */
  544. void scale( float, float, float);                      /* scale.c         */
  545. void premulttensor( Tensor, Matrix, Tensor);           /* tensor.c        */
  546. void multtensor( Tensor, Matrix, Tensor);              /* tensor.c        */
  547. void copytensor( Tensor, Tensor);                      /* tensor.c        */
  548. void copytensortrans( Tensor, Tensor);                 /* tensor.c        */
  549. void font(short);                                      /* text.c          */
  550. void charstr(char *);                                  /* text.c          */
  551. void cmov( float, float, float);                       /* text.c          */
  552. void cmov2( float, float);                             /* text.c          */
  553. void cmovi( Icoord, Icoord, Icoord);                   /* text.c          */
  554. void cmovs( Scoord, Scoord, Scoord);                   /* text.c          */
  555. void cmov2i( Icoord, Icoord);                          /* text.c          */
  556. void cmov2s( Scoord, Scoord);                          /* text.c          */
  557. long getwidth(void);                                   /* text.c          */
  558. long getheight(void);                                  /* text.c          */
  559. void translate( float, float, float);                  /* trans.c         */
  560. void rot( float, char);                                /* trans.c         */
  561. void rotate( Angle, char);                             /* trans.c         */
  562. char * vallocate(unsigned);                            /* valloc.c        */
  563. void vcall( float[], int);                             /* vcalls.c        */
  564. void v4f(float[4]);                                    /* vcalls.c        */
  565. void v3f(float[3]);                                    /* vcalls.c        */
  566. void v2f(float[2]);                                    /* vcalls.c        */
  567. void v4d(double[4]);                                   /* vcalls.c        */
  568. void v3d(double[3]);                                   /* vcalls.c        */
  569. void v2d(long[2]);                                     /* vcalls.c        */
  570. void v4i(long[4]);                                     /* vcalls.c        */
  571. void v3i(long[3]);                                     /* vcalls.c        */
  572. void v2i(long[2]);                                     /* vcalls.c        */
  573. void v4s(short[4]);                                    /* vcalls.c        */
  574. void v3s(short[3]);                                    /* vcalls.c        */
  575. void v2s(short[2]);                                    /* vcalls.c        */
  576. void polarview( Coord, Angle, Angle, Angle);           /* viewing.c       */
  577. void lookat( Coord, Coord, Coord, Coord, Coord, Coord, /* viewing.c       */
  578.    Angle);
  579. void perspective( Angle, float, Coord, Coord);         /* viewing.c       */
  580. void window( Coord, Coord, Coord, Coord, Coord,        /* viewing.c       */
  581.    Coord);
  582. void ortho( Coord, Coord, Coord, Coord, Coord,         /* viewing.c       */
  583.    Coord);
  584. void ortho2( Coord, Coord, Coord, Coord);              /* viewing.c       */
  585. void pushviewport(void);                               /* viewp.c         */
  586. void popviewport(void);                                /* viewp.c         */
  587. void viewport( Screencoord, Screencoord, Screencoord,  /* viewp.c         */
  588.    Screencoord);
  589. void getviewport( Screencoord *, Screencoord *,        /* viewp.c         */
  590.    Screencoord *, Screencoord *);
  591. void yobbarays(int);                                   /* yobbarays.c     */
  592.  
  593. #else    /* __PROTOTYPE__ */
  594.  
  595. /*
  596.  * function definitions
  597.  */
  598.  
  599. /*
  600.  * arc routines
  601.  */
  602. extern void    arcprecision();
  603. extern void    circleprecision();
  604. extern void    arc();
  605. extern void    arcs();
  606. extern void    arci();
  607. extern void    arcf();
  608. extern void    arcfs();
  609. extern void    arcfi();
  610. extern void    circ();
  611. extern void    circs();
  612. extern void    circi();
  613. extern void    circf();
  614. extern void    circfs();
  615. extern void    circfi();
  616.  
  617. /*
  618.  * attr routines
  619.  */
  620. extern void    popattributes();
  621. extern void    pushattributes();
  622.  
  623. /*
  624.  * curve routines
  625.  */
  626. extern void    curvebasis();
  627. extern void    curveprecision();
  628. extern void    rcrv();
  629. extern void    crv();
  630. extern void    crvn();
  631. extern void    rcrvn();
  632. extern void    curveit();
  633.  
  634. /*
  635.  * draw routines
  636.  */
  637. extern void    draw();
  638. extern void    draws();
  639. extern void    drawi();
  640. extern void    draw2();
  641. extern void    draw2s();
  642. extern void    draw2i();
  643. extern void    rdr();
  644. extern void    rdrs();
  645. extern void    rdri();
  646. extern void    rdr2();
  647. extern void    rdr2s();
  648. extern void    rdr2i();
  649. extern void    bgnline();
  650. extern void    endline();
  651. extern void    bgnclosedline();
  652. extern void    endclosedline();
  653.  
  654. /*
  655.  * device routines
  656.  */
  657. extern void    qdevice();
  658. extern void    unqdevice();
  659. extern long    qread();
  660. extern void    qreset();
  661. extern long    qtest();
  662. extern Boolean    isqueued();
  663.  
  664. extern void    gexit();
  665. extern void    gconfig();
  666. extern void    shademodel();
  667. extern long    getgdesc();
  668. extern long    winopen();
  669. extern void    ginit();
  670. extern void    gconfig();
  671. extern long    getvaluator();
  672. extern Boolean    getbutton();
  673. extern void    clear();
  674. extern void    colorf();
  675. extern void    color();
  676. extern void    mapcolor();
  677. extern long    getplanes();
  678.  
  679. extern void    vinit();
  680. extern void    voutput();
  681. extern void    verror();
  682. extern void    vnewdev();
  683. extern char    *vgetdev();
  684.  
  685. /*
  686.  * mapping routines
  687.  */
  688. extern int    WtoVx();
  689. extern int    WtoVy();
  690. extern void    VtoWxy();
  691. extern void    CalcW2Vcoeffs();
  692.  
  693. /*
  694.  * general matrix and vector routines
  695.  */
  696. extern void    mult4x4();
  697. extern void    copymatrix();
  698. extern void    identmatrix();
  699. extern void    copytranspose();
  700.  
  701. extern void    multvector();
  702. extern void    copyvector();
  703. extern void    premultvector();
  704.  
  705. /*
  706.  * matrix stack routines
  707.  */
  708. extern void    getmatrix();
  709. extern void    popmatrix();
  710. extern void    loadmatrix();
  711. extern void    pushmatrix();
  712. extern void    multmatrix();
  713.  
  714. /*
  715.  * move routines
  716.  */
  717. extern void    move();
  718. extern void    moves();
  719. extern void    movei();
  720. extern void    move2();
  721. extern void    move2s();
  722. extern void    move2i();
  723. extern void    rmv();
  724. extern void    rmvs();
  725. extern void    rmvi();
  726. extern void    rmv2();
  727. extern void    rmv2s();
  728. extern void    rmv2i();
  729.  
  730. /*
  731.  * object routines
  732.  */
  733. extern Boolean    isobj();
  734. extern long    genobj();
  735. extern void    delobj();
  736. extern void    makeobj();
  737. extern void    callobj();
  738. extern void    closeobj();
  739. extern long    getopenobj();
  740. extern Token    *newtokens();
  741.  
  742. /*
  743.  * patch routines.
  744.  */
  745. extern void    defbasis();
  746. extern void    patchbasis();
  747. extern void    patchcurves();
  748. extern void    patchprecision();
  749. extern void    patch();
  750. extern void    rpatch();
  751.  
  752. /*
  753.  * point routines
  754.  */
  755. extern void    pnt();
  756. extern void    pnts();
  757. extern void    pnti();
  758. extern void    pnt2();
  759. extern void    pnt2s();
  760. extern void    pnt2i();
  761. extern void    bgnpoint();
  762. extern void    endpoint();
  763.  
  764. /*
  765.  * v routines
  766.  */
  767. extern void    v4f();
  768. extern void    v3f();
  769. extern void    v2f();
  770. extern void    v4d();
  771. extern void    v3d();
  772. extern void    v2d();
  773. extern void    v4i();
  774. extern void    v3i();
  775. extern void    v2i();
  776. extern void    v4s();
  777. extern void    v3s();
  778. extern void    v2s();
  779.  
  780. /*
  781.  * polygon routines.
  782.  */
  783. extern void    concave();
  784. extern void    backface();
  785. extern void    frontface();
  786. extern void    polymode();
  787. extern void    poly2();
  788. extern void    poly2i();
  789. extern void    poly2s();
  790. extern void    polyi();
  791. extern void    polys();
  792. extern void    polf2();
  793. extern void    polf2i();
  794. extern void    polf2s();
  795. extern void    polfi();
  796. extern void    polfs();
  797. extern void    poly();
  798. extern void    polf();
  799. extern void    pmv();
  800. extern void    pmvi();
  801. extern void    pmv2i();
  802. extern void    pmvs();
  803. extern void    pmv2s();
  804. extern void    pmv2();
  805. extern void    pdr();
  806. extern void    rpdr();
  807. extern void    rpdr2();
  808. extern void    rpdri();
  809. extern void    rpdr2i();
  810. extern void    rpdrs();
  811. extern void    rpdr2s();
  812. extern void    rpmv();
  813. extern void    rpmv2();
  814. extern void    rpmvi();
  815. extern void    rpmv2i();
  816. extern void    rpmvs();
  817. extern void    rpmv2s();
  818. extern void    pdri();
  819. extern void    pdr2i();
  820. extern void    pdrs();
  821. extern void    pdr2s();
  822. extern void    pdr2();
  823. extern void    pclos();
  824. extern void    bgnpolygon();
  825. extern void    endpolygon();
  826.  
  827. /*
  828.  * rectangle routines
  829.  */
  830. extern void    rect();
  831. extern void    recti();
  832. extern void    rects();
  833. extern void    rectf();
  834. extern void    rectfi();
  835. extern void    rectfs();
  836.  
  837. /*
  838.  * tensor routines
  839.  */
  840. extern void multtensor();
  841. extern void copytensor();
  842. extern void premulttensor();
  843. extern void copytensortrans();
  844.  
  845. /*
  846.  * text routines
  847.  */
  848. extern void    font();
  849. extern void    charstr();
  850. extern void    cmov();
  851. extern void    cmov2();
  852. extern void    cmovi();
  853. extern void    cmovs();
  854. extern void    cmov2i();
  855. extern void    cmov2s();
  856. extern long    getwidth();
  857. extern long    getheight();
  858.  
  859. /*
  860.  * transformation routines
  861.  */
  862. extern void    scale();
  863. extern void    translate();
  864. extern void    rotate();
  865. extern void    rot();
  866.  
  867. /*
  868.  * window definition routines
  869.  */
  870. extern void    ortho();
  871. extern void    ortho2();
  872. extern void    lookat();
  873. extern void    window();
  874. extern void    polarview();
  875. extern void    perspective();
  876.  
  877. /*
  878.  * routines for manipulating the viewport
  879.  */
  880. extern void    viewport();
  881. extern void    popviewport();
  882. extern void    pushviewport();
  883.  
  884. /*
  885.  * routines for retrieving the graphics position
  886.  */
  887. extern void    getgp();
  888. extern void    getgpos();
  889.  
  890. /*
  891.  * routines for handling the buffering
  892.  */
  893. extern void    backbuffer();
  894. extern void    frontbuffer();
  895. extern void    swapbuffers();
  896. extern void    doublebuffer();
  897.  
  898. /*
  899.  * routines for window sizing and positioning
  900.  */
  901. extern void    prefsize();
  902. extern void    prefposition();
  903. #endif
  904.  
  905.